//
//  XMGFileManager.m
//  BuDeJie17
//
//  Created by xiaomage on 16/7/31.
//  Copyright © 2016年 XiaoMaG. All rights reserved.
//

#import "XMGFileManager.h"
// 计算文件夹缓存尺寸,如果文件里面子文件比较多,比较耗时
@implementation XMGFileManager

+ (void)removeDirectory:(NSString *)directoryPath
{
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    BOOL isDirectory;
    BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory];
    
    if (!isExist || !isDirectory) {
        // 抛异常:NSException
        // name:异常名称
        // reason:异常原因
        //       NSException *excp = [NSException exceptionWithName:@"FileError" reason:@"笨蛋,传入的路径可能为空,或者不是文件夹路径,仔细好好检查吧" userInfo:nil];
        //        [excp raise];
        @throw [NSException exceptionWithName:@"FileError" reason:@"传入的路径可能为空,或者不是文件夹路径" userInfo:nil];
    }
    
    // 1.删除Cache文件夹
    [mgr removeItemAtPath:directoryPath error:nil];
    // 2.创建新Cache文件夹
    [mgr createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil];
}

// 异步任务,不要返回数据
+ (void)getSizeOfDirectoryPath:(NSString *)directoryPath completion:(void (^)(int))completion
{
//    completion  = {
//        // 计算完成会自动调用
//        _totalSize = totalSize;
//        
//        [self.tableView reloadData];
//        
//    };
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       // 子线程执行
        // 1.获取文件管理者对象
        NSFileManager *mgr = [NSFileManager defaultManager];
        // 判断传入文件夹路径存在
        BOOL isDirectory;
        BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory];
        
        if (!isExist || !isDirectory) {
            @throw [NSException exceptionWithName:@"FileError" reason:@"传入的路径可能为空,或者不是文件夹路径" userInfo:nil];
        }
        
        int totalSize = 0;
        
        // 2.获取所有文件(传递文件夹路径)
        NSArray *subPaths = [mgr subpathsAtPath:directoryPath];
        // 3.遍历所有文件
        for (NSString *subPath in subPaths) {
            // 4.拼接完整文件名
            NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath];
            
            // 判断下是否是隐藏文件
            if ([subPath hasPrefix:@".DS"]) continue;
            
            // 是否是文件夹
            BOOL isDirectory;
            // 判断文件是否存在,并且是否是文件夹
            [mgr fileExistsAtPath:filePath isDirectory:&isDirectory];
            if (isDirectory) continue;
            
            // 5.attributesOfItemAtPath:传入文件全路径,就能获取文件属性
            NSDictionary *attr = [mgr attributesOfItemAtPath:filePath error:nil];
            // 6.把文件尺寸累加
            totalSize += [attr fileSize];
        }
        
        // 一定要记得回到主线程
        dispatch_sync(dispatch_get_main_queue(), ^{
            if (completion) {
                completion(totalSize);
            }
        });
        
               
    });
    
   
}


@end
